package com.turing.post.salesmanage.util;

import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 销售单持卡人实名明细业务接口
 * 
 * @author zxp
 * @Dec 23, 2012
 */
@Remote
@Local
public interface SaleOrderRealNameDetailDao {

	/**
	 * 根据主键查询销售单持卡人实名明细
	 * 
	 * @param saleOrderRealNameDetail
	 *            销售单持卡人实名明细
	 * @return 销售单持卡人实名明细
	 */
	public SaleOrderRealNameDetail getSaleOrderRealNameDetailByPrimaryKey(
			SaleOrderRealNameDetail saleOrderRealNameDetail);

	// /**
	// * 查询该销售单下数据记录数,销售单号不输入查询全部
	// *
	// * @param 销售单编号
	// * @return 记录数
	// */
	// public BigInteger getSaleOrderRealNameDetailTotal(BigInteger
	// saleOrderId);
	//
	// /**
	// * 根据销售单编号查询该销售单持卡人实名明细,销售单号不输入查询全部
	// *
	// * @param page
	// * 页码
	// * @param saleOrderId
	// * 销售单编号
	// * @return 销售单持卡人实名明细列表
	// */
	// public List<SaleOrderRealNameDetail> getSaleOrderRealNameDetailList(
	// Integer page, BigInteger saleOrderId);

	/**
	 * 根据销售单编号查询该销售单持卡人实名明细
	 * 
	 * @param saleOrderId
	 *            销售单编号
	 * @return 销售单持卡人实名明细列表
	 */
	public List<SaleOrderRealNameDetail> getAllSaleOrderRealNameDetailList(
			BigInteger saleOrderId);

	/**
	 * 新增
	 * 
	 * @param saleOrderRealNameDetail
	 * @throws PCPSApplicationException
	 */
	public void insertSaleOrderRealNameDetail(
			SaleOrderRealNameDetail saleOrderRealNameDetail)
			throws PCPSApplicationException;

	/**
	 * 修改
	 * 
	 * @param saleOrderRealNameDetail
	 * @throws PCPSApplicationException
	 */
	public void updateSaleOrderRealNameDetail(
			SaleOrderRealNameDetail saleOrderRealNameDetail)
			throws PCPSApplicationException;

	/**
	 * 删除
	 * 
	 * @param saleOrderRealNameDetail
	 * @throws PCPSApplicationException
	 */
	public Integer deleteSaleOrderRealNameDetail(
			SaleOrderRealNameDetail saleOrderRealNameDetail)
			throws PCPSApplicationException;

	/**
	 * 销售单实名信息查询
	 * 
	 * @param saleOrderId
	 *            销售单编号
	 * @param batchNo
	 *            制卡批次号
	 * @param cardSeqNo
	 *            卡顺序号
	 * @return 销售单实名信息
	 */
	public SaleOrderRealNameDetail getSaleOrderRealNameByCondition(
			BigInteger saleOrderId, String batchNo, String cardSeqNo);

	/**
	 * 根据条件查询持卡人实名信息列表
	 * 
	 * @param saleOrderId
	 *            销售单编号
	 * @param batchNo
	 *            卡批次号
	 * @param cardNo
	 *            卡号
	 * @param startCardSeqNo
	 *            起始卡序列号
	 * @param endCardSeqNo
	 *            终止卡序列号
	 * @param name
	 *            姓名
	 * @param idNo
	 *            证件号
	 * @return 销售单实名信息列表
	 */
	public List<SaleOrderRealNameDetail> getSaleOrderRealNameDetailListByCondition(
			BigInteger saleOrderId, String batchNo, String cardNo,
			String startCardSeqNo, String endCardSeqNo, String name,
			String idNo, Integer page);

	/**
	 * 查询销售单实名信息记录条数
	 * 
	 * @param saleOrderId
	 *            销售单编号
	 * @param batchNo
	 *            卡批次号
	 * @param cardNo
	 *            卡号
	 * @param startCardSeqNo
	 *            起始卡序列号
	 * @param endCardSeqNo
	 *            终止卡序列号
	 * @param name
	 *            姓名
	 * @param idNo
	 *            证件号
	 * @return 记录数
	 */
	public BigInteger getSaleOrderRealNameDetailTotalByCondition(
			BigInteger saleOrderId, String batchNo, String cardNo,
			String startCardSeqNo, String endCardSeqNo, String name, String idNo);

	/**
	 * 删除销售单下所以持卡人实名信息
	 * 
	 * @param saleOrderId
	 *            销售单编号
	 * @return 执行记录数
	 */
	public Integer deleteSaleOrderRealNameDetailByOrderId(BigInteger saleOrderId)
			throws PCPSApplicationException;

	/**
	 * 根据两要素检索持卡人明细
	 * 
	 * @param Name
	 *            姓名
	 * @param CardNo
	 *            卡号
	 * @return 检索清单
	 */
	public List<Object[]> getPersonalCustomCardDatil(PCPSWebInput webInput,
			String Pername, String CardNo);

	public HashMap<String, BigInteger> getSaleOrderRealNameDetailList(
			BigInteger saleOrderId);
	
	/**
	 * 同一实名制个人客户，一天内购卡超过2万元
	 * @param issueCompanyNo 发卡商编号
	 * @param startTime 起始时间
	 * @param endTime 终止时间
	 * @param totalSaleAmount 总售卡金额
	 * @return
	 */
	public List<Object[]> getSaleOrderRealNameDetailByAlarmRule2(
			String issueCompanyNo,String startTime, String endTime);
}
